<?php
/**
 * User: Ht
 * Date: 2019/5/9
 * Time: 9:57
 */

namespace common\helpers;
class FileHelper
{

    /**
     * @param $file string 要创建的文件目录
     * @return bool
     */
    public static function createFile($file)
    {
        is_dir($file) || mkdir($file, 0777, true);
        return true;
    }

    //递归删除文件夹下内容 $isDelFolder  false 不保留，删除文件夹  true 保留，不删除文件夹
    public static function delDir($delDir, $isStayFolder = false)
    {
        if (is_dir($delDir)) {
            if ($df = opendir($delDir)) {
                while ($file = readdir($df)) {
                    if ($file != "." && $file != "..") {
                        $fullpath = $delDir . "/" . $file;
                        if (is_dir($fullpath)) {
                            self::delDir($fullpath);
                        } else {
                            unlink($fullpath);
                        }
                    }
                }
                closedir($df);
            }
            $isStayFolder or rmdir($delDir);
        } elseif (file_exists($delDir)) {
            unlink($delDir);
        }
    }

    /**
     * @param $src string 要复制的文件目录
     * @param $dst string 要复制到的文件目录
     * @return bool
     *  //复制文件和文件夹
     */
    public static function copyDir($src, $dst)
    {
        if (is_dir($src)) {
            $dir = opendir($src);
            self::createFile($dst);
            while (false !== ($file = readdir($dir))) {
                if (($file != '.') && ($file != '..')) {
                    if (is_dir($src . '/' . $file)) {
                        self::copyDir($src . '/' . $file, $dst . '/' . $file);
                        continue;
                    } else {
                        copy($src . '/' . $file, $dst . '/' . $file);
                    }
                }
            }
            closedir($dir);
            return true;
        } elseif (file_exists($src)) {
            copy($src, $dst);
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取文件夹大小
     * @param string $dir 根文件夹路径
     * @return int
     */
    public static function getDirSize($dir)
    {
        $handle = opendir($dir);
        $sizeResult = 0;
        while (false !== ($FolderOrFile = readdir($handle))) {
            if ($FolderOrFile != "." && $FolderOrFile != "..") {
                if (is_dir("$dir/$FolderOrFile")) {
                    $sizeResult += self::getDirSize("$dir/$FolderOrFile");
                } else {
                    $sizeResult += filesize("$dir/$FolderOrFile");
                }
            }
        }
        closedir($handle);
        return $sizeResult;
    }

    /**
     * 写入日志
     * @param $path string 写入日志的文件和文件名 /cj/1.txt
     * @param $content string 要写入的内容
     * @return bool|int
     */
    public static function writeLog($path, $content)
    {
        self::createFile(dirname($path));
        return file_put_contents($path, "\r\n" . $content, FILE_APPEND);
    }

}
